function permute(nums: number[]): number[][] {
  const res:number[][] = []
  const n = nums.length
  function backtrack(first = 0) {
      // 所有数都填完了
      if (first == n) {
          res.push([...nums])
      }
      for (let i = first; i < n; i++) {
          // 动态维护数组
          let temp = nums[first]
          nums[first] = nums[i]
          nums[i] = temp
          // 继续递归填下一个数
          backtrack(first + 1)
          // 撤销操作
          temp = nums[first]
          nums[first] = nums[i]
          nums[i] = temp
      }
  }
  backtrack()
  return res
}
// 1 2 3 4 5
//       5 4
// 1 2 4 3 5
//     4 5 3
// 1 2 5 4 3
//     5 3 4
// 1 3 2 4 5
// ···